package com.restphp.java.utils.string.core;

import java.security.SecureRandom;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Created by sofical on 2020/7/3.
 */
public class StringUtils {
    /**
     * 是否为空.
     * @param source 需要判断的对象.
     * @return 结果.
     */
    public static Boolean isBlank(String source) {
        return  (source==null) || (source.length()==0) || (source.trim().length()==0);
    }

    /**
     * 生成随机数字子母.
     * @param length 长度.
     * @return 随机数字子母.
     */
    public static String randomString(Integer length) {
        char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q',
                'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
        return randomCore(length, codeSequence);
    }

    /**
     * 随机字母.
     * @param length 长度.
     * @return String.
     */
    public static String randomEnChar(Integer length) {
        char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q',
                'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
        return randomCore(length, codeSequence);
    }

    /**
     * 生成随机数字.
     * @param length 长度.
     * @return 随机数字.
     */
    public static String randomNum(Integer length) {
        char[] codeSequence = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
        return randomCore(length, codeSequence);
    }

    /**
     * 生成随机符号.
     * @param length 长度.
     * @return 随机符号.
     */
    public static String randomSymbol(Integer length) {
        // ()`~!@#$%^&*_-+=|{}[]:;'<>,.?
        char[] codeSequence = { '+', '-', '+', ')', '(', '*', '~', '!', '@', '#', '$', '%', '^', '&' };
        return randomCore(length, codeSequence);
    }

    /**
     * 随机字符串生成.
     * @param length 长度.
     * @param codeSequence 取值范围.
     * @return String.
     */
    public static String randomCore(Integer length, char[] codeSequence) {
        // 创建一个随机数生成器类
        SecureRandom random = new SecureRandom();
        StringBuilder randomCode = new StringBuilder();
        // 随机产生codeCount
        for (int i = 0; i < length; i++) {
            String code = String.valueOf(codeSequence[random.nextInt(10)]);
            // 将产生的四个随机数组合在一起。
            randomCode.append(code);
        }
        return randomCode.toString().toLowerCase();
    }

    /**
     * 是否包括中文.
     * @param str to check value.
     * @return result.
     */
    public static Boolean isChinese(String str) {
        Pattern p = Pattern.compile("[\u4e00-\u9fa5]");
        Matcher m = p.matcher(str);
        if (m.find()) {
            return true;
        }
        return false;
    }
}
